/*
1:安装axios
2:导入axios
3:设置axios基地址(axios.create({}))
4:加入请求拦截与响应拦截
5：暴露出去
6：导入调用(api/模块.js中导入使用)
*/

import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import router from '@/router' // router===this.$router
// Message===this.$message
/*
开发环境：http://localhost:3000/api
生产环境：http://ihrm-java.itheima.net/api

环境变量设置
开发环境：npm run dev
   根目录创建一个文件 .env.development
   创建开发环境的变量值（要求：VUE_APP_开头）
     VUE_APP_URL = 'http://localhost:3000/api'
   访问：process.env.VUE_APP_URL

测试环境（自定义环境）:
   根目录创建一个文件 .env.xxx
   创建测试环境的变量值（要求：VUE_APP_开头）
      VUE_APP_URL = 'http://119.91.150.211:3000/api'
   访问：process.env.VUE_APP_URL
   配制package.json
      scripts:{
         dev:...
         build:prod:...
         build:xxx:.....  --mode xxx
      }

生产环境：npm run build:prod
   根目录创建一个文件 .env.production
   创建开发环境的变量值（要求：VUE_APP_开头）
     VUE_APP_URL = 'http://ihrm-java.itheima.net/api'
   访问：process.env.VUE_APP_URL
*/
// const baseURL = process.env.NODE_ENV === 'development' ? 'http://localhost:3000/api' : 'http://ihrm-java.itheima.net/api'
// console.log('环境变量基地址', process.env.VUE_APP_URL)
const _axios = axios.create({
  // baseURL: 'http://localhost:3000/api' // 本地配制好的的同学使用
  // baseURL:'http://119.91.150.211:3000/api' // 在线基地址
  baseURL: process.env.VUE_APP_URL,
  withCredentials: true // 跨域不带cookie,true:跨域带cookie
})
_axios.interceptors.request.use(
  (config) => {
    // console.log('config', config)
    // 不需要请求头的加了不报错
    // config.headers.Authorization = `Bearer ${store.state.user.token}`
    // 不需要请求头的加了报错

    if (!config.noToken) {
    // 有可能用户登录后访问一些不需要token接口
      config.headers.Authorization = `Bearer ${store.state.user.token}`
    }
    return config
  },
  (err) => {
    return Promise.reject(err)
  }
)
// 响应拦截
_axios.interceptors.response.use(
  // 2开头
  (res) => {
    if (res.data.success) {
      return res.data
    } else {
      // console.log(a)
      // return Promise.reject(res.data.message)
      // 提示错误
      Message.error(res.data.message)
      // 抛出一个promise错误，中止了后面.then执行
      return Promise.reject(new Error(res.data.message))
    }
  },
  // 非2开头
  (err) => {
    // console.dir(err)
    if (err.response && err.response.status === 401) {
      // 删除token,删除用户信息
      store.commit('user/LOGOUT')
      // 提示错误信息
      Message.error(err.response.data.message)
      // 跳转到登录页
      router.push('/login')
    }

    return Promise.reject(err)
  }
)
export default _axios
